package com.schoolegard.services.impl;

import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;

import com.schoolegard.services.RemoteOperatorService;
import com.schoolgard.dao.CardLogToDeviceDao;
import com.schoolgard.dao.PictureLogToDeviceDao;
import com.schoolgard.dao.TimingToDeviceDao;
import com.schoolgard.entitybean.CardLogToDevice;
import com.schoolgard.entitybean.PictureLogToDevice;
import com.schoolgard.entitybean.TimingToDevice;

public class RemoteOperatorServiceImpl implements RemoteOperatorService {
    private CardLogToDeviceDao cardLogToDeviceDao;
    private PictureLogToDeviceDao pictureLogToDeviceDao;
    private TimingToDeviceDao timingToDeviceDao;
    public void setCardLogToDeviceDao(CardLogToDeviceDao cardLogToDeviceDao) {
    	this.cardLogToDeviceDao = cardLogToDeviceDao;
    }
    public void setPictureLogToDeviceDao(PictureLogToDeviceDao pictureLogToDeviceDao) {
    	this.pictureLogToDeviceDao = pictureLogToDeviceDao;
    }
    public void setTimingToDeviceDao(TimingToDeviceDao timingToDeviceDao) {
    	this.timingToDeviceDao = timingToDeviceDao;
    }
    
    @Override
    public List<CardLogToDevice> findCardToDevice() {
    	DetachedCriteria criteria = DetachedCriteria.forClass(CardLogToDevice.class);
    	criteria.addOrder(Order.desc("createDatetime"));
    	return cardLogToDeviceDao.findByCriteria(criteria);
    }
	@Override
	public List<PictureLogToDevice> findPictureLogToDevice() {
		DetachedCriteria criteria = DetachedCriteria.forClass(PictureLogToDevice.class);
    	criteria.addOrder(Order.desc("creatDatetime"));
		return pictureLogToDeviceDao.findByCriteria(criteria);
	}
	@Override
	public List<TimingToDevice> findTimingToDevice() {
		DetachedCriteria criteria = DetachedCriteria.forClass(TimingToDevice.class);
    	criteria.addOrder(Order.desc("createDatetime"));
		return timingToDeviceDao.findByCriteria(criteria);
	}
	@Override
	public void deletePictureTd(Long pictureId) {
		pictureLogToDeviceDao.remove(findPictureById(pictureId));
	}
	@Override
	public void deleteCardTd(Long cardId) {
		cardLogToDeviceDao.remove(findCardById(cardId));
	}
	@Override
	public void deleteTimingTd(Long timingId) {
		timingToDeviceDao.remove(findTimingById(timingId));	
	}
	@Override
	public CardLogToDevice findCardById(Long cardId) {
		return cardLogToDeviceDao.findById(cardId);
	}
	@Override
	public TimingToDevice findTimingById(Long timingId) {
		return timingToDeviceDao.findById(timingId);
	}
	@Override
	public PictureLogToDevice findPictureById(Long pictureId) {
		return pictureLogToDeviceDao.findById(pictureId);
	}
	@Override
	public void saveOrUpdateCardTd(CardLogToDevice cardtd) {
		cardLogToDeviceDao.createOrModify(cardtd);
	}
	@Override
	public void saveOrUpdateTimingTd(TimingToDevice timingtd) {
		timingToDeviceDao.createOrModify(timingtd);		
	}
	@Override
	public void saveOrUpdatePictureTd(PictureLogToDevice picturetd) {
		pictureLogToDeviceDao.createOrModify(picturetd);		
	}    
	public void saveCardAll(List<CardLogToDevice> ctds){
		for(CardLogToDevice ctd : ctds) {
			this.saveOrUpdateCardTd(ctd);
		}
	}
	public void savePicAll(List<PictureLogToDevice> ctds){
		for(PictureLogToDevice ctd : ctds) {
			this.saveOrUpdatePictureTd(ctd);
		}
	}
	public void saveTimeAll(List<TimingToDevice> ctds){
		for(TimingToDevice ctd : ctds) {
			this.saveOrUpdateTimingTd(ctd);
		}
	}
}
